# 1.使用pip 命令 安装 numpy 其中 -i 后 可以指定下载的镜像源url
# pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple


# 一般来说 numpy 通常会简写为np
import numpy as np

np_array1 = np.array([1, 2, 3])
print(np_array1, type(np_array1))

np_array2 = np.array([[1, 2, 3], [3, 4, 5]])
print(np_array2)
print([[1, 2, 3], [3, 4, 5]])

# shape可以查看ndarray的结构
print(np_array2.shape)
# 重构矩阵
print(np_array2.reshape((3, 2)))

print(np_array2.astype(float))

print(np_array2)

# 通过索引取值，其中第一个位置表示行方向  第二个位置表示列方向
print(np_array2[0:2, 0:2])
print(np_array2[0, :])

# 通过索引赋值
np_array2[0, :] = 0
print(np_array2)

np_array3 = np.array(
    [
        [0, 1, 2, 3, 4, 5],
        [10, 11, 12, 13, 14, 15],
        [20, 21, 22, 23, 24, 25],
        [30, 31, 32, 33, 34, 35],
        [40, 41, 42, 43, 44, 45],
        [50, 51, 52, 53, 54, 55]
    ]
)

print(np_array3)
print(np_array3[:, 2])

print(np_array3[0, 3:5])
print(np_array3[0, [3, 4]])  # 通过列表传入固定下标
print(np_array3[0, (3, 4)])  # 通过元组传入固定下标

print(np_array3[2::2, 0::2])
print(np_array3[(2, 4), 0::2])

print(np_array3[(4, 5), 4:])
# print(np_array3[(4, 5), (4,5)])

print(np_array3[(0, 2, 5), 2])
print(np_array3[(0, 1, 2, 3, 4), (1, 2, 3, 4, 5)])

print(np_array3[3:, (0, 2, 5)])

print(np_array2 > 3)
# 通过判断结果取出对应位置为true的值
print(np_array2[np_array2 > 3])

# np.split 根据行对ndarray 进行切分成 n份
# 通过split 切分后可以通过下标进行取值
print(np.split(np_array3, 2)[0])

np_array4 = np.split(np_array3, 2)[0]
np_array5 = np.split(np_array3, 2)[1]
# vstack 中传参为一个tuple
# vstack按行方向进行拼接
print(np.vstack((np_array4, np_array5)))

# hstack
# hstack按列方向进行拼接
print(np.hstack((np_array4, np_array5)))

# 和vstack结果一致,如果对应轴位置传参为1那么和hstack结果一致
print(np.concatenate((np_array4, np_array5), 1))

print(np_array3.T)

# 运算

# ndarry中单个矩阵与单个值相加为 对应矩阵中所有值进行相加
print(np_array3 + 1)
print("*************")
print(np_array3)
# ndarry中两个矩阵计算为对应位置数据进行相加
print(np_array3 + np_array3.T)

from numpy import random

print(random.rand(2, 3))  # 创建一个2*3的二维矩阵
print(random.rand(3))
